/**递归出口为没有子节点或者子节点没有id 
 * 当为条件分支节点时需要将conditionNodes里的节点全部分离出，
 * 一个条件节点下所有节点的conditionId都为该条件节点的id如果条件节点下有递归则取最上层条件节点id
*/
export const flatFunc = (res, data,conditionId) => {
  if(data.conditionNodes!==undefined){
    getAllConditionSonNodes(data.conditionNodes,res,conditionId?conditionId:data.id)
  }
  if(data.childNode){
    if (!data.childNode.id) {
      res.push({
        id: data.id,
        nodeName: data.nodeName,
        parentId: data.parentId,
        type: data.type,
        conditionNodes: data.conditionNodes,
        conditionId:conditionId
      })
      return res
    }
  }
  else{
    res.push({
      id: data.id,
      nodeName: data.nodeName,
      parentId: data.parentId,
      type: data.type,
      conditionNodes: data.conditionNodes,
      conditionId:conditionId
    })
    return res
  } 
  res.push({
    id: data.id,
    nodeName: data.nodeName,
    parentId: data.parentId,
    type: data.type,
    conditionNodes: data.conditionNodes,
    conditionId:conditionId
  })
  flatFunc(res, data.childNode,conditionId)
}
/**
 * 
 * 查找父节点中的审核节点，
 * 1.条件节点的兄弟节点互不影响无论层级
 * 当接受的节点数组中查找到父节点存在conditionId属性说明此节点为
 */
export const getItemAncestors = (res, source, item) => {
  if (item === null||item===undefined) {
    return res
  }
  let parentNode = []
  source.forEach((parentItem) => {
    if (parentItem.id === item) {
      parentNode.push(parentItem)
    }
    if(parentItem.conditionId ===item ){
      parentNode.push(parentItem)
    }
    if (parentItem.conditionNodes) {
      parentItem.conditionNodes.forEach(ele => {
        if (ele.id === item) {
          parentNode.push(parentItem)
        }
      })
    }
  })
  if (parentNode.length === 0) {
    return res
  } else {
    parentNode.forEach((item,index)=>{
      if(item.conditionId&&item.type ==1&&index!==0){
        res.push({ id: item.id, name: item.nodeName })
      }
    })
    // 父节点存在且为审核节点
    if (parentNode[0].type == 1) {
      res.push({ id: parentNode[0].id, name: parentNode[0].nodeName })
    }
    getItemAncestors(res, source, parentNode[0].parentId  )
  }
}
const getAllConditionSonNodes= (node,res,id) =>{
  node.forEach(item=>{
    if(item.childNode){
      flatFunc(res,item.childNode,id)
      if(item.childNode.conditionNodes){
        getAllConditionSonNodes(item.childNode.conditionNodes,res)
      }
    }
  })
}